package sft.BancodeDados;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import sft.Logica.Producao;

public class ProducaoDao {

    private Connection conexao;

    public ProducaoDao() throws SQLException {
            conexao = new CriaConexao().getConnection();
    }

    public void Operacao(Producao l) throws SQLException {
        try (PreparedStatement stmt = conexao.prepareStatement(l.getSql())) {
            switch (l.getCaso()) {
                case "adicionar":
                    
                    setADD(stmt, l);
                    break;

                case "editar":
                    
                    setEdit(stmt, l);
                    break;

                case "deletar":
                    setDelete(stmt, l);
                    break;
            }

            stmt.execute();
            stmt.close();
            conexao.close();
        }

    }
    //insert into sft_inco (user, ncon, conv, unid, aten, os, data) values ();
    //insert into sft_glos (user, ncon, conv, unid,valor, os, data) values ();
    private void setADD(PreparedStatement stmt, Producao l) throws SQLException {
        stmt.setInt(1, l.getUsuario());
        stmt.setInt(2, l.getnConformidade());
        stmt.setInt(3, l.getConvenio());
        stmt.setInt(4, l.getUnidade());
        //posição 5 esta sendo setada no fim do metodo
        stmt.setString(6, l.getOS());
        stmt.setDate(7, l.getData());
        stmt.setString(8, l.getObs());
        stmt.setString(9, l.getStatus());
        //determina qual tabela estamos e se foi implementado corretamente o nome da tabela
        switch(l.getTabela()){
            case "sft_inco":
                    
                    stmt.setInt(5, l.getAtendente());
                    break;

                case "sft_glos":
                    
                    stmt.setDouble(5, l.getValor());
                    break;
        }
    }    
    
    private void setDelete(PreparedStatement stmt, Producao l) throws SQLException {

        stmt.setString(1, l.getOS());
    }

    private void setEdit(PreparedStatement stmt, Producao l) throws SQLException {
        
        stmt.setInt(1, l.getUsuario());
        stmt.setInt(2, l.getnConformidade());
        stmt.setInt(3, l.getConvenio());
        stmt.setInt(4, l.getUnidade());
        //posição 5 esta sendo setada no fim do metodo
        stmt.setString(6, l.getObs());
        stmt.setString(7, l.getStatus());
        stmt.setString(8, l.getOS());
        //determina qual tabela estamos e se foi implementado corretamente o nome da tabela
        switch(l.getTabela()){
            case "sft_inco":
                    
                    stmt.setInt(5, l.getAtendente());
                    break;

                case "sft_glos":
                    
                    stmt.setDouble(5, l.getValor());
                    break;
        }
    }
}
